home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Atari Compendium
/
The Atari Compendium (Toad Computers) (1994).iso
/
files
/
umich
/
tex
/
td187src.lzh
/
MTAPPL.D
< prev
next >
Wrap
Text File
|
1991-06-08
|
8KB
|
200 lines
DEFINITION MODULE mtAppl;
FROM MagicSys IMPORT Byte, ByteSet,
sWORD, sINTEGER, sCARDINAL, sBITSET,
lWORD, lINTEGER, lCARDINAL, lBITSET;
(*--------------------------------------------------------------------------*
* Auf die folgenden Variablen NUR LESEND ZUGREIFEN!!! *
*--------------------------------------------------------------------------*)
VAR ApplIdent: sINTEGER; (* Application-ID des Programms *)
VDIHandle: sINTEGER; (* Nummer der geöffneten Workstation *)
MaxWidth: sINTEGER; (* Maximale Anzahl Pixel waagerecht *)
MaxHeight: sINTEGER; (* Maximale Anzahl Pixel senkrecht *)
Bitplanes: sINTEGER; (* Anzahl der Bitplanes *)
PROCEDURE ApplInit;
(* Meldet die Applikation beim AES an, öffnet VDI-Workstation mit Handle
* VDIHandle (siehe oben). Wird im Modulkörper ausgeführt und braucht
* nicht weiter beachtet zu werden!
*)
PROCEDURE InstallTermproc (proc: PROC);
(* Installiert eine Prozedur, welche bei Aufruf von ApplTerm automatisch
* abgearbeitet wird. So können Systemresourcen auf einfache Art frei-
* gegeben werden.
*)
PROCEDURE ApplTerm (return: sINTEGER);
(* gibt alle benutzten Workstations frei und meldet die Applikation beim
* AES wieder ab. Gibt den Wert return an das aufrufende Programm zurück.
*)
PROCEDURE ApplPath (VAR path: ARRAY OF CHAR);
(* liefert den Pfad, von dem das Programm gestartet wurde *)
PROCEDURE OpenWorkstation (): sINTEGER;
(* Öffnet eine virtuelle Workstation, mit allem Pipapo, returniert Handle.
* Jede über diese Funktion geöffnete Workstation muß mit CloseWorkstation
* wieder geschlossen werden. Ein Aufruf von ApplTerm erledigt dies auch
* sehr elegant.
*)
PROCEDURE CloseWorkstation (handle: sINTEGER);
(* Schließt eine Workstation *)
(*--------------------------------------------------------------------------*
* Maus-Handling *
*--------------------------------------------------------------------------*
* *
* GEM hat im allgemeinen etwas Probleme mit der Maus. Deshalb ist es *
* sinnvoll, die Maus zentral über ein Modul zu steuern. *
* *
*--------------------------------------------------------------------------*)
PROCEDURE MouseOn;
PROCEDURE MouseArrow;
PROCEDURE MouseCursor;
PROCEDURE MouseBusy;
PROCEDURE MouseFinger;
PROCEDURE MouseHand;
PROCEDURE MouseThincross;
PROCEDURE MouseThickcross;
PROCEDURE MouseOutline;
PROCEDURE MouseUser;
(* Diese Routinen schalten die Maus mit dem jeweilige Bild EIN *)
PROCEDURE MouseOff;
(* Schaltet die Maus AUS *)
TYPE MFORM = RECORD
mfXhot: sINTEGER;
mfYhot: sINTEGER;
mfNplanes: sINTEGER;
mfFg: sINTEGER;
mfBg: sINTEGER;
mfMask: ARRAY [0..15] OF sCARDINAL;
mfData: ARRAY [0..15] OF sCARDINAL;
END;
PROCEDURE UserMouse (VAR form: MFORM);
(* Setzt eine User-Definierte Maus. Sichtbar erst mit MouseUser! *)
(*--------------------------------------------------------------------------*
* GEM-Bildschirm-Font-Handling *
*--------------------------------------------------------------------------*
* *
* Das Fonthandling läuft unabhängig von den Font-Id's. Ein Font ist eine *
* Nummer im Bereich SystemFont..FontNumber(). *
* *
* Die Größe der Fonts wird in POINTs berechnet. *
* *
* Die Prozeduren SelectFont und ScaleFont benötigen ein vorhergehendes *
* LoadFonts ansonsten wird der Systemzeichensatz benutzt. *
* *
* Bei den Prozeduren FontCode, Monospaced, und FontInfo werden bei nicht *
* ausgeführtem LoadFonts die Werte des Systemzeichensatzes retuniert. *
* *
* FontNumber liefert ohne LoadFonts 1, da ja ein Zeichensatz verfügbar *
* ist: Der Systemfont. *
* *
* LoadFonts stellt bei allen nachgeladenen Fonts die Minimum-Größe ein. *
* Ausnahme ist der Systemfont, bei dem die der jeweiligen Auflösung ent- *
* sprechende Größe benutzt wird. *
* *
*--------------------------------------------------------------------------*)
CONST SystemFont = 1;
PROCEDURE VqGdos (): BOOLEAN;
(* TRUE, wenn ein GDOS geladen ist *)
PROCEDURE LoadFonts (handle: sINTEGER): sINTEGER;
(* Lädt GEM-Fonts, wenn möglich. Dazu muß natürlich ein GDOS präsent sein.
* Liefert Errorcode:
*
* 0 = Erfolgreich
* -1 = Kein GDOS
* -2 = Keine Fonts geladen
* -3 = Kein Speicher für Verwaltung
* -4 = Ungültiges VDI-Handle
*)
PROCEDURE FreeFonts (handle: sINTEGER);
(* Gibt den benutzten Speicher wieder frei. Wird auch bei ApplTerminate
* ausgeführt und braucht somit nicht weiter beachtet zu werden.
*)
PROCEDURE FontNumber(): sINTEGER;
(* Anzahl der zur Verfügung stehenden Fonts *)
PROCEDURE FontCode (id: sINTEGER): sINTEGER;
(* Ermittelt anhand des Font-Id die modulinterne Fontnummer *)
PROCEDURE SelectFont (handle, font: sINTEGER; VAR size: sINTEGER);
(* Selektion eines Fonts. *)
PROCEDURE ScaleFont (handle, size: sINTEGER; VAR width, height: sINTEGER): sINTEGER;
(* Bestimmung der Größe des aktuellen Fonts. *)
PROCEDURE Monospaced (font: sINTEGER): BOOLEAN;
(* TRUE, wenn nicht proportional *)
PROCEDURE PossibleSize (font: sINTEGER; VAR sizearray: ARRAY OF sINTEGER);
(* füllt den ARRAY mit allen möglichen Größen des Fonts. Ein Element mit
* Wert 0 schließt die Liste ab. Der Größte Wert steht als erstes in der
* Liste, anschließend, der nächst kleinere usw.
* Anmerkung: Intern werden max. 30 verschiedene Größen je Font gespeichert.
*)
PROCEDURE FontInfo (handle, font: sINTEGER; VAR name: ARRAY OF CHAR;
VAR id, size, min, max: sINTEGER);
(* Info über den Font:
*
* name = Name des Fonts
* id = GDOS-Font ID
* size = aktuelle Größe, wenn über ScaleFont eingestellt, sonst -1
* min = Minimale Größe in Points
* max = Maximale Größe in Points
*)
(*-------------------------------------------------------------------------*
* Vorgefertigte Alertmessages, KEINE MAGICALERTS! *
*-------------------------------------------------------------------------*)
PROCEDURE Message (m: ARRAY OF CHAR);
(* Gibt Alertbox aus *)
CONST YES = 1;
NO = 2;
CANCEL = 3;
PROCEDURE Question (default: sCARDINAL; m: ARRAY OF CHAR): BOOLEAN;
(* Alertbox mit JA/NEIN-Entscheidung, TRUE wenn default gewählt *)
PROCEDURE Select (default: sCARDINAL; m: ARRAY OF CHAR): sCARDINAL;
(* Alertbox mit 3 Entscheidungen: JA/NEIN/ABBRUCH *)
(*-------------------------------------------------------------------------*
* Auswerten der Commandline *
*-------------------------------------------------------------------------*)
PROCEDURE ParamCount (): sINTEGER;
(* Anzahl der Parameter in der Kommandozeile, -1 wenn keine Parameter *)
PROCEDURE ParamString (n: sINTEGER; VAR arg: ARRAY OF CHAR);
(* liefert das n'te Argumen